/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package service;


import beans.ListRol;
import beans.ListUsuario;
import beans.Mensaje;
import beans.Usuario;
import dao.Conexion;
import dao.UsuarioDAO;
import java.sql.SQLException;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import response.LoginResponse;

/**
 *
 * @author Ahmed
 */
public class UsuarioService {
    private static UsuarioDAO usuarioDAO = new UsuarioDAO();
    private static CorreoService correoService = new CorreoService();
    private static Conexion conexion = new Conexion();
    
    public Mensaje RegistrarUsuario(Usuario usuario) throws AddressException, MessagingException {
        Mensaje mensaje = new Mensaje();
        
        try {
            conexion.abrirConexion();
            usuarioDAO.setConexion(conexion);
            usuario = usuarioDAO.InsertarUsuario(usuario);
            mensaje.id = usuario.getId();
            mensaje.cadena= "Estimado : " + usuario.getNombre() + " " + usuario.getApellidoPaterno() + " " + usuario.getApellidoMaterno() +", le agradecemos por registrarse al Sistema de Packet Tracker, su username es : " + usuario.getUser() + ", y su password es : "+ usuario.getPassword();
            usuario.setEmail(usuario.getUser());
            correoService.envioCorreo(usuario.getEmail(),mensaje.cadena);
            conexion.commit();
        }
        catch (SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e){
            System.out.println("Error en DAO, Registrar Usuario. Error: " + e.toString());
            try{
                conexion.rollback();
            }
            catch (SQLException e1){
                System.out.println("En rollback ... : " + e1.toString());
            }
            mensaje.me = "Sucedió un error al momento de Registrar";
            System.out.println(mensaje.me);
        }
        finally{
            try{
                conexion.cerrarConexion();
            }
            catch (SQLException e2){
                System.out.println("Cerramos " + e2.toString());
            }
        }
        System.out.println(mensaje.me);
        return mensaje;
    }

    public Mensaje ModificarUsuario(Usuario usuario) {
        Mensaje mensaje = new Mensaje();
        try{
            conexion.abrirConexion();
            usuarioDAO.setConexion(conexion);
            mensaje = usuarioDAO.ActualizarUsuario(usuario);
            conexion.commit();
            conexion.cerrarConexion();
        }
        catch (SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e){
            System.out.println("Error en DAO, Modificar Usuario. Error: " + e.toString());
            try {
                conexion.rollback();
            }
            catch (SQLException e1){
                System.out.println("En rollback ... : " + e1.toString());
            }
            mensaje.me = "Sucedio un error al ModificarUsuario";
            System.out.println(mensaje.me);            
        }
        finally{
            try{
                conexion.cerrarConexion();
            }
            catch (SQLException e2){
                System.out.println("Cerramos: " + e2.toString());
            }
        }     
        System.out.println(mensaje.me);
        return mensaje;
    }

    public Mensaje EliminarUsuario(Usuario usuario) {
        Mensaje mensaje = new Mensaje();
        try{
            conexion.abrirConexion();
            usuarioDAO.setConexion(conexion);
            mensaje = usuarioDAO.EliminarUsuario(usuario);
            conexion.commit();
            conexion.cerrarConexion();
        }
        catch (SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e){
            System.out.println("Error en DAO, Eliminar Usuario. Error: " + e.toString());
            try {
                conexion.rollback();
            }
            catch (SQLException e1){
                System.out.println("En rollback ... : " + e1.toString());
            }
            mensaje.me = "Sucedio un error al EliminarUsuario";
            System.out.println(mensaje.me);            
        }
        finally{
            try{
                conexion.cerrarConexion();
            }
            catch (SQLException e2){
                System.out.println("Cerramos: " + e2.toString());
            }
        }     
        System.out.println(mensaje.me);
        return mensaje;
        
    }

    public Mensaje CambiarContrasenia(Usuario usuario) {
        Mensaje mensaje = new Mensaje();
        try{
            conexion.abrirConexion();
            usuarioDAO.setConexion(conexion);
            mensaje = usuarioDAO.CambiarContrasenia(usuario);
            conexion.commit();
            conexion.cerrarConexion();
        }
        catch (SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e){
            System.out.println("Error en DAO, Cambiar Contraseña: Error: " + e.toString());
            try {
                conexion.rollback();
            }
            catch (SQLException e1){
                System.out.println("En rollback ... : " + e1.toString());
            }
            mensaje.me = "Sucedio un error al Cambiar Contraseña";
            System.out.println(mensaje.me);            
        }
        finally{
            try{
                conexion.cerrarConexion();
            }
            catch (SQLException e2){
                System.out.println("Cerramos: " + e2.toString());
            }
        }     
        System.out.println(mensaje.me);
        return mensaje;
    }

    public LoginResponse LoginUsuario(Usuario usuario) {
        LoginResponse login = new LoginResponse();
        try{
            conexion.abrirConexion();
            usuarioDAO.setConexion(conexion);
            login = usuarioDAO.loginUsuario(usuario);
            conexion.cerrarConexion();
        }
        catch(SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e){
            login.me = "Error en Login de usuario, vuelva a intentarlo más tarde";
            System.out.println("Error en Login: " + e.toString());
        }
        finally{
            try{
                conexion.cerrarConexion();
            }
            catch (SQLException e2){
                System.out.println("Cerramos: " + e2.toString());
            }
        } 
        return login;
    }

    public ListUsuario BuscarUsuario(Usuario usuario) {
        ListUsuario listaUsuario = new ListUsuario();
        try{
            conexion.abrirConexion();
            usuarioDAO.setConexion(conexion);
            listaUsuario = usuarioDAO.BuscarUsuario(usuario);
            conexion.cerrarConexion();
        }
        catch(SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e){          
            System.out.println("Error en BD al listar Usuario" + e.toString());
        }
        finally{
            try{
                conexion.cerrarConexion();
            }
            catch (SQLException e2){
                System.out.println("Cerramos: " + e2.toString());
            }
        } 
        return listaUsuario;
    }

    public ListRol listarRoles() {
        ListRol lRoles = new ListRol();
        try{
            conexion.abrirConexion();
            usuarioDAO.setConexion(conexion);
            lRoles=usuarioDAO.listarRoles();
        }
        catch(SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e){
            lRoles.me = "Error en BD al Listar Roles";
        }
        finally{
            try{
                conexion.cerrarConexion();
            }catch(SQLException e){
            }
        }
        return lRoles;
    }
    
}
